/*
 * MConfiguracioFlujos.java
 *
 * Created on 20 de junio de 2006, 01:16 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ig.metrica.ui.confFlujos;

import ig.metrica.ModeloSBean;
import ig.metrica.ModelosDTO;
import ig.metrica.ejb.conflujos.ConfiguracionFlujosSessionBean;
import ig.metrica.ejb.conflujos.ConfiguracionflujosDTO;
import ig.metrica.ui.interfaces.comunes.IModelo;
import ig.util.NoContinuaException;
import java.util.Collection;
import java.util.ArrayList;
//import org.apache.log4j.Logger;

/**
 *
 * @author jsanchez
 */
public class MConfiguracioFlujos implements IModelo {
//    private static Logger log = Logger.getLogger(MConfiguracioFlujos.class.getName());
    
    private PConfiguracionFlujos panel=null;
    
    //private ConfiguracionFlujosSessionRemoteHome home=null;
    
    //private Integer modelo;
    
    private boolean mensaje=true;
    
    public void setMensaje(boolean mensaje) {
        this.mensaje = mensaje;
    }
    
//    public void _setModelo(Integer modelo) {
//        this.modelo = modelo;
//    }
    
    /** Creates a new instance of MConfiguracioFlujos */
    public MConfiguracioFlujos(PConfiguracionFlujos panel) {
        this.panel=panel;
    }
    
    private boolean validarDatos(){
        Object[][] Data=panel.getData();
        for (int i = 0; i < Data.length; i++) {
            for (int j = 0; j < Data.length; j++) {
                if((Data[i][0].equals(Data[j][0])) && (Data[i][1].equals(Data[j][1])) && (Data[i][3].equals(Data[j][3])) && (i!=j)){
                    return false;
                }
            }
        }
        return true;
    }
    
    public void guardar() throws NoContinuaException {
        if(validarDatos()){
            Object[][] Data=panel.getData();
            Collection c= new ArrayList();
            for (int i = 0; i < Data.length; i++) {
                ConfiguracionflujosDTO DTO_= new ConfiguracionflujosDTO();
                DTO_.setIdmodelo(this.DTO.getId());
                DTO_.setAltura((Integer) Data[i][0]);
                DTO_.setDuracion((Integer) Data[i][1]);
                DTO_.setProcentaje((Integer) Data[i][2]);
                if((Boolean)Data[i][3])DTO_.setValormora(1);
                else if(!(Boolean)Data[i][3])DTO_.setValormora(0);
                if((Boolean)Data[i][4])DTO_.setSaldocapital(1);
                else if(!(Boolean)Data[i][4])DTO_.setSaldocapital(0);
                c.add(DTO_);
            }
            try {
                new ConfiguracionFlujosSessionBean().modificar(c,DTO.getId());
                //this.home.create().modificar(c,DTO.getId());
            /*} catch (RemoteException ex) {
                ex.printStackTrace();
                throw new NoContinuaException(ex.getMessage());
            } catch (CreateException ex) {
                ex.printStackTrace();
                throw new NoContinuaException(ex.getMessage());*/
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new NoContinuaException(ex.getMessage());
            }
        }else
            throw new NoContinuaException("En la configuracion de fljjos, Existes datos iguales");
    }
    //ig.metrica.ModeloSRemote modeloSB =null;
    public ig.metrica.ModeloSBean lookupModeloSBean() {
        /*try {
            if(modeloSB==null){
                Properties prop = new Properties();
                prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
                String Sockec = new ConexionServer().getSocketServer();
                prop.put( Context.PROVIDER_URL, Sockec);
                
                javax.naming.Context c = new javax.naming.InitialContext(prop);
                Object remote = c.lookup("ModeloSBean");
                ig.metrica.ModeloSRemoteHome rv = (ig.metrica.ModeloSRemoteHome) javax.rmi.PortableRemoteObject.narrow(remote, ig.metrica.ModeloSRemoteHome.class);
                modeloSB =rv.create();
            }
            return modeloSB;
        } catch(javax.naming.NamingException ne) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ne);
            throw new RuntimeException(ne);
        } catch(javax.ejb.CreateException ce) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,ce);
            throw new RuntimeException(ce);
        } catch(java.rmi.RemoteException re) {
//            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE,"exception caught" ,re);
            throw new RuntimeException(re);
        }*/
        return new ModeloSBean();
    }
    ModelosDTO DTO=null;
    public Collection buscar() throws NoContinuaException {
        try {
            DTO=this.lookupModeloSBean().findByNombre(this.panel.getNombreModelo());
            //loadHome();
            panel.setCConfiguraciones(new ConfiguracionFlujosSessionBean().findByModelo(DTO.getId()));
            //panel.setCConfiguraciones(home.create().findByModelo(DTO.getId()));
            return null;
        } catch (Exception ex) {
//            log.error(ex.getMessage());
            throw new NoContinuaException(ex);
        }
    }
    
    public void modificar() throws NoContinuaException {
    }
    
    public void nuevo() throws NoContinuaException {
        Object[][] Data=panel.getData();
        Object[][] DataAux=new Object[Data.length+1][5];
        for (int i = 0; i < Data.length; i++) {
            for (int j = 0; j < 5; j++) {
                DataAux[i][j]=Data[i][j];
            }
        }
        DataAux[Data.length][0]=0;
        DataAux[Data.length][1]=0;
        DataAux[Data.length][2]=0;
        DataAux[Data.length][3]=true;
        DataAux[Data.length][4]=false;
        panel.setData(DataAux);
    }
    
    public void eliminar() throws NoContinuaException {
        Object[][] Data= panel.getData();
        Object[][] DataAux=new Object[Data.length-1][5];
        int row=panel.getFilaSeleccionada();
        boolean borrado=false;
        int k=0;
        for (int i = 0; i < Data.length; i++) {
            for (int j = 0; j < 5; j++) {
                if(row!=i){
                    DataAux[k][j]=Data[i][j];
                    borrado=false;
                }else
                    borrado=true;
            }
            if(!borrado)
                k++;
        }
        panel.setData(DataAux);
    }
    
    public void salir() throws NoContinuaException {
    }
    
    public void imprimir() throws NoContinuaException {
    }
    
    public Object getTO() throws NoContinuaException {
        return null;
    }
    
    public void cancelar() throws NoContinuaException {
    }
    
    /*private void loadHome(){
        String mensaje=null;
        try{
            Properties prop = new Properties();
            prop.put( Context.INITIAL_CONTEXT_FACTORY, IGBean.INITIAL_CONTEXT_FACTORY);
            
            String Sockec = new ConexionServer().getSocketServer();
            prop.put( Context.PROVIDER_URL, Sockec);
            InitialContext ctx = new InitialContext(prop);
            home = (ConfiguracionFlujosSessionRemoteHome)ctx.lookup("ConfiguracionFlujosSessionBean");
            return;
        } catch (NamingException ex) {
            mensaje="Metrica no pudo conectarce con el servidor" +
                    "\nVerifique " +
                    "\nLa conexcion de Red local" +
                    "\nQue el servidor esté en servicio" +
                    "\nLa direccion IP y el PUERTO del sevidor" +
                    "\nEl NOMBRE del servicio que se pide al servidor";
        }
        //panel.getInternalFrame().setEstado(CodigoBotones.grupoEntrada);
//        log.error(mensaje);
        JOptionPane.showMessageDialog( this.panel,mensaje,"Mensaje",JOptionPane.OK_OPTION );
    }*/
}
